package com.zx._12_算法.algorithm.math;

import java.util.Arrays;

/**
 * @version v1.0
 * @Project: knowledge
 * @Title: BitTest
 * @Description: 比特位计算
 *         给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ，
 *         计算其二进制数中的 1 的数目并将它们作为数组返回。
 *
 *         示例 1:
 *         输入: 2
 *         输出: [0,1,1]
 *
 *         示例 2:
 *         输入: 5
 *         输出: [0,1,1,2,1,2]
 * @author: zhangxue
 * @date: 2019年11月18日下午10:18:19
 * @company: 未知
 * @Copyright: Copyright (c) 2015
 */
public class BitTest {

    public static void main(String[] args) {
//		System.out.println(countOne(0));
//		System.out.println(countOne(1));
//		System.out.println(countOne(2));
//		System.out.println(countOne(3));
//		System.out.println(countOne(4));
//		System.out.println(countOne(6));
//		System.out.println(countOne(8));

        int num = 5;
        int[] result = new int[num + 1];

        for (int i = 0; i <= num; i++) {
            result[i] = countOne(i);
        }

        System.out.println(Arrays.toString(result));
    }

    //知道怎么计算二级制即可
    public static int countOne(int i) {
        int result = 0;
        int yu = i % 2;
        int chu = i / 2;
        if (yu == 1) {
            result++;
        }
        if (chu == 0) {
            return result;
        }

        result += countOne(chu);

        return result;
    }
}
